
        Reverse Engineering the NMS Bytebeat Advanced Waveform

Tools:
 - Base64 to Hex converter: https://gchq.github.io/CyberChef/#recipe=From_Base64('A-Za-z0-9%2B/%3D',true,false)To_Hex('Space',0)&ieol=CRLF&oeol=FF

    Terms:

Advanced waveform tree:
The bytebeat tree that modifies the sound wave.

Node:
A box in the advanced waveform tree. A node can be either a source input or an operator.

Source Input:
A node that must be at the bottom of each branch of the tree. A source input can be either:
1. A waveform: Sawtooth, Sine, Square, or Triangle.
2. A numerical input ranging from 1 to 255.

Input:
A child node that feeds into a parent. An input may be either a source input or an operator.

Operator:
A node that modifies two child inputs. An operator must have exactly two child nodes. An operator may also be the child of another operator.

All available operators are:
ADD, SUBTRACT, MULTIPLY, DIVIDE, MODULO, SHIFT LEFT, SHIFT RIGHT, GREATER THAN, GREATER OR EQUAL, LESSER THAN, LESSER OR EQUAL, AND, OR, XOR.

Generation:
A depth tier of the advanced waveform tree. The root node is Generation 1. A child of a Generation N node is in Generation N+1.

Parent:
Any operator node that has two child nodes.

Child:
Any node directly below a parent. A child may be either an operator or a source input.


    Structural Rules

1. Only 4 operator generations are allowed. A 5th generation is allowed only for source inputs.

2. All waveform source inputs in the same tree must use the same waveform type.

3. Allowed ordered child pairs in order from left to right are:
   - operator + operator
   - operator + numerical input
   - operator + waveform
   - waveform + operator
   - waveform + numerical input
   - waveform + waveform

4. Disallowed ordered child pairs in order from left to right are:
   - numerical input + operator
   - numerical input + waveform
   - numerical input + numerical input

5. The ordered child pair operator + numerical input is only allowed when the parent is in Generation 1 or Generation 2.

6. Every branch must terminate in a source input.

7. An operator is only valid if it has exactly two child nodes beneath it.

8. Possible number of nodes per generation, assuming the generation above contains valid parents:
   - Generation 1: 1
   - Generation 2: 0 or 2
   - Generation 3: 0, 2, or 4
   - Generation 4: 0, 2, 4, 6, or 8
   - Generation 5: 0, 2, 4, 6, 8, or 10

9. A single-node tree is possible, and that node will always be a waveform.

10. A tree with 5 operators in Generation 4 is only possible when those operators are produced by 3 parent operators in Generation 3.

11. Only 4 numerical source input nodes are allowed.

12. A generation may only contain nodes if at least one parent exists in the generation above it.

13. ??? Found and instance where if there is a full tree on one side then a tree that reaches the bottom on the other side must have a numerical input unless there is already 4 numerical inputs present at which point a 5th generation on that side cannot exist.

14. ??? Perhaps a simpler rule is that there cannot be more than 11 operators present at once?

    User Control Limitations

1. A user can cycle an operator to any other operator.

2. A user must randomize a node to make it a parent.

3. To get a 5th source-input generation, the user must randomize a 3rd-generation node.

4. Removing a node deletes everything connected underneath it and turns that node into a waveform, never a numerical input.

5. Randomizing a 1st-, 2nd-, or 3rd-generation waveform or operator makes it a parent.

6. Randomizing a numerical input does not make it a parent.

7. To get two waveform child nodes from one parent, the user must randomize that parent’s parent.

8. To make one child node a numerical input, the user must randomize the parent.





	Initial test parameters:

All options left, down or lowest number unless said otherwise below
Full synchroniser active
100% attenuation and volume
C Minor
Melody empty
Rhythm empty
Everything enablabled
Single waveform node in the Advanced Waveform

	Notation Guide:

L: left child node
RR: right child node of right child node
LLL: left child node of left child node of left child node
RLR: right child node of left child node of right child node
/: separating left and right child nodes
,: indicating a switch to another pair of child nodes in the same generation
[]: Moving block of values
!: Refering to digit underneath
FR: full right side of the tree
Gen: Generation of the waveform tree
Variable: Apply the value from the following tests
NI: Numerical input


Each number progression changes variables:
0: Pure Sawtooth, one node - AwEAAAAAAAAAAAAFDIARAEA99gAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAAAA

Adding the first operator the operator is the variable with two wave child nodes:       
1: Add - AwMAQAAAAAAAAAAABQyAEQBAPfYAAAAAAAAAAP8AAAAAAAAAAAAAAAAAAAAA
2: Subtract - AwMAUAAAAAAAAAAABQyAEQBAPfYAAAAAAAAAAP8AAAAAAAAAAAAAAAAAAAAA
3: Multiply - AwMAYAAAAAAAAAAABQyAEQBAPfYAAAAAAAAAAP8AAAAAAAAAAAAAAAAAAAAA
4: Divide - AwMAcAAAAAAAAAAABQyAEQBAPfYAAAAAAAAAAP8AAAAAAAAAAAAAAAAAAAAA
5: Modulo - AwMAgAAAAAAAAAAABQyAEQBAPfYAAAAAAAAAAP8AAAAAAAAAAAAAAAAAAAAA
6: Shift Left - AwMAkAAAAAAAAAAABQyAEQBAPfYAAAAAAAAAAP8AAAAAAAAAAAAAAAAAAAAA
7: Shift Right - AwMAoAAAAAAAAAAABQyAEQBAPfYAAAAAAAAAAP8AAAAAAAAAAAAAAAAAAAAA
8: Greater Than - AwMAsAAAAAAAAAAABQyAEQBAPfYAAAAAAAAAAP8AAAAAAAAAAAAAAAAAAAAA
9: Greater or equal - AwMAwAAAAAAAAAAABQyAEQBAPfYAAAAAAAAAAP8AAAAAAAAAAAAAAAAAAAAA
10: Lesser than: AwMA0AAAAAAAAAAABQyAEQBAPfYAAAAAAAAAAP8AAAAAAAAAAAAAAAAAAAAA
11: Lesser or Equal - AwMA4AAAAAAAAAAABQyAEQBAPfYAAAAAAAAAAP8AAAAAAAAAAAAAAAAAAAAA
12: And - AwMAEAAAAAAAAAAABQyAEQBAPfYAAAAAAAAAAP8AAAAAAAAAAAAAAAAAAAAA
13: Or - AwMAIAAAAAAAAAAABQyAEQBAPfYAAAAAAAAAAP8AAAAAAAAAAAAAAAAAAAAA
14: Xor - AwMAMAAAAAAAAAAABQyAEQBAPfYAAAAAAAAAAP8AAAAAAAAAAAAAAAAAAAAA

Waveform editor variable:
15: Sawtooth - AwMAMAAAAAAAAAAABQyAEQBAPfYAAAAAAAAAAP8AAAAAAAAAAAAAAAAAAAAA
16: Sine - AwMAMAAAAAAAAAAABQyAERBAPfYAAAAAAAAAAP8AAAAAAAAAAAAAAAAAAAAA
17: Square - AwMAMAAAAAAAAAAABQyAESBAPfYAAAAAAAAAAP8AAAAAAAAAAAAAAAAAAAAA
18: Triangle - AwMAMAAAAAAAAAAABQyAETBAPfYAAAAAAAAAAP8AAAAAAAAAAAAAAAAAAAAA

Adding R Gen2 operator
Gen1: Xor, Gen2: wave/variable, Gen3: R: wave/wave
19: And - AwUAATAAAAAAAAAAAAUMgBEwQD32AAAAAAAAAAD/AAAAAAAAAAAAAAAAAAAA

Adding RR Gen3 operator
Gen1: Xor; Gen2: wave/And; Gen3: R: wave/variable; Gen4: RR: wave/wave
20: And - AwcAABEwAAAAAAAAAAAFDIARMEA99gAAAAAAAAAA/wAAAAAAAAAAAAAAAAAA

Adding RRR Gen4 operator
Gen1: Xor; Gen2: wave/And; Gen3: R: wave/And; Gen4: RR: wave/variable; Gen5: RRR: wave/wave, 
21: Or - AwkAAAIRMAAAAAAAAAAABQyAETBAPfYAAAAAAAAAAP8AAAAAAAAAAAAAAAAA

Adding RRRL Gen4 operator
Gen1: Xor; Gen2: wave/And; Gen3: R: wave/And; Gen4: RR: variable/Or; Gen5: RRR: wave/wave, RRL: wave/wave
22: Divide - AwsAAHACETAAAAAAAAAAAAUMgBEwQD32AAAAAAAAAAD/AAAAAAAAAAAAAAAA

Adding RL Gen3 operator
Gen1: Xor; Gen2: wave/And; Gen3: R: variable/And; Gen4: RL: wave/wave, RR: Divide/Or; Gen5: RRL: wave/wave, RRR: wave/wave
23: Subtract - Aw0ABQBwAhEwAAAAAAAAAAAFDIARMEA99gAAAAAAAAAA/wAAAAAAAAAAAAAA

Adding RLR Gen4 operator
Gen1: Xor; Gen2: wave/And; Gen3: R: Subtract/And; Gen4: RL: wave/variable, RR: Divide/Or; Gen5: RLR: wave/wave, RRL: wave/wave, RRR: wave/wave
24: Multiply - Aw8AAGUAcAIRMAAAAAAAAAAABQyAETBAPfYAAAAAAAAAAP8AAAAAAAAAAAAA

Adding RLL Gen4 operator
Gen1: Xor; Gen2: wave/And; Gen3: R: Subtract/And; Gen4: RL: variable/Multiply, RR: Divide/Or; Gen5: RLL: wave/wave, RLR: wave/wave, RRL: wave/wave, RRR: wave/wave
25: Add - AxEABABlAHACETAAAAAAAAAAAAUMgBEwQD32AAAAAAAAAAD/AAAAAAAAAAAA

Return to #18
Adding L Gen2 operator
Gen1: Xor; Gen2: variable/wave; Gen3: L: wave/wave
26: Modulo - AwUAgDAAAAAAAAAAAAUMgBEwQD32AAAAAAAAAAD/AAAAAAAAAAAAAAAAAAAA

Adding LL Gen3 operator
Gen1: Xor; Gen2: Modulo/wave; Gen3: L: variable/wave; Gen4: LL: wave/wave
27: Shift left - AwcAkIAwAAAAAAAAAAAFDIARMEA99gAAAAAAAAAA/wAAAAAAAAAAAAAAAAAA

Adding LLL Gen4 operator
Gen1: Xor; Gen2: Modulo/wave; Gen3: L: Shift left/wave; Gen4: LL: variable/wave; Gen5: LLL: wave/wave
28: Greater than - AwkAsJCAMAAAAAAAAAAABQyAETBAPfYAAAAAAAAAAP8AAAAAAAAAAAAAAAAA

Adding LLR Gen4 operator
Gen1: Xor; Gen2: Modulo/wave; Gen3: L: Shift left/wave; Gen4: LL: Greater than/variable; Gen5: LLL: wave/wave, LLR: wave/wave
29: Lesser or equal - AwsAsA6QgDAAAAAAAAAAAAUMgBEwQD32AAAAAAAAAAD/AAAAAAAAAAAAAAAA

Adding LR Gen3 operator
Gen1: Xor; Gen2: Modulo/wave; Gen3: L: Shift left/variable; Gen4: LL: Greater than/Lesser or equal, LR: wave/wave; Gen5: LLL: wave/wave, LLR: wave/wave
30: Or - Aw0AsA6QAoAwAAAAAAAAAAAFDIARMEA99gAAAAAAAAAA/wAAAAAAAAAAAAAA

Adding LR Gen3 operator
Gen1: Xor; Gen2: Modulo/wave; Gen3: L: Shift left/Or; Gen4: LL: Greater than/Lesser or equal, LR: variable/wave; Gen5: LLL: wave/wave, LLR: wave/wave, LRL: wave/wave
31: Divide - Aw8AsA6QBwKAMAAAAAAAAAAABQyAETBAPfYAAAAAAAAAAP8AAAAAAAAAAAAA

Adding LRR Gen4 operator
Gen1: Xor; Gen2: Modulo/wave; Gen3: L: Shift left/Or; Gen4: LL: Greater than/Lesser or equal, LR: Divide/variable; Gen5: LLL: wave/wave, LLR: wave/wave, LRL: wave/wave, LRR: wave/wave
32: Subtract - AxEAsA6QBwBSgDAAAAAAAAAAAAUMgBEwQD32AAAAAAAAAAD/AAAAAAAAAAAA

Adding R Gen2 operator
Gen1: Xor; Gen2: Modulo/variable; Gen3: L: Shift left/Or, R: wave/wave; Gen4: LL: Greater than/Lesser or equal, LR: Divide/Subtract; Gen5: LLL: wave/wave, LLR: wave/wave, LRL: wave/wave, LRR: wave/wave
33: Multiply - AxMAsA6QBwBSgAYwAAAAAAAAAAAFDIARMEA99gAAAAAAAAAA/wAAAAAAAAAA

Adding RR Gen3 operator
Gen1: Xor; Gen2: Modulo/Multiply; Gen3: L: Shift left/Or, R: wave/variable; Gen4: LL: Greater than/Lesser or equal, LR: Divide/Subtract, RR: wave/wave; Gen5: LLL: wave/wave, LLR: wave/wave, LRL: wave/wave, LRR: wave/wave
34: And - AxUAsA6QBwBSgAAWMAAAAAAAAAAABQyAETBAPfYAAAAAAAAAAP8AAAAAAAAA

Adding RRR Gen4 operator + mandatory Gen5 numerical input with a value of 1
Gen1: Xor; Gen2: Modulo/Multiply; Gen3: L: Shift left/Or, R: wave/And; Gen4: LL: Greater than/Lesser or equal, LR: Divide/Subtract, RR: wave/variable; Gen5: LLL: wave/wave, LLR: wave/wave, LRL: wave/wave, LRR: wave/wave, RRR: wave/variable
35: RR: Shift right, RRR: ni1 - AxcAsA6QBwBSgADwAaFjAAAAAAAAAAAFDIARMEA99gAAAAAAAAAA/wAAAAAA

Changing RRRR Gen5 numerical input to its highest value of 255
Gen1: Xor; Gen2: Modulo/Multiply; Gen3: L: Shift left/Or, R: wave/And; Gen4: LL: Greater than/Lesser or equal, LR: Divide/Subtract, RR: wave/Shift right; Gen5: LLL: wave/wave, LLR: wave/wave, LRL: wave/wave, LRR: wave/wave, RRR: wave/variable
36: Ni255 - AxcAsA6QBwBSgADw/6FjAAAAAAAAAAAFDIARMEA99gAAAAAAAAAA/wAAAAAA

Changing LRRR Gen5 numerical input to 67
Gen1: Xor; Gen2: Modulo/Multiply; Gen3: L: Shift left/Or, R: wave/And; Gen4: LL: Greater than/Lesser or equal, LR: Divide/Subtract, RR: wave/Shift right; Gen5: LLL: wave/wave, LLR: wave/wave, LRL: wave/wave, LRR: wave/variable, RRR: wave/ni255
37: Ni67 - AxcAsA6QBw9DUoAA8P+hYwAAAAAAAAAABQyAETBAPfYAAAAAAAAAAP8AAAAA

Changing LRLR Gen5 waveform to numerical input 200
Gen1: Xor; Gen2: Modulo/Multiply; Gen3: L: Shift left/Or, R: wave/And; Gen4: LL: Greater than/Lesser or equal, LR: Divide/Subtract, RR: wave/Shift right; Gen5: LLL: wave/wave, LLR: wave/wave, LRL: wave/variable, LRR: wave/ni67, RRR: wave/ni255
38: Ni200 - AxcAsA6Q8Mhw8ENSgADw/6FjAAAAAAAAAAAFDIARMEA99gAAAAAAAAAA/wAA

Changing LLLR Gen5 waveform to numerical input 30
Gen1: Xor; Gen2: Modulo/Multiply; Gen3: L: Shift left/Or, R: wave/And; Gen4: LL: Greater than/Lesser or equal, LR: Divide/Subtract, RR: wave/Shift right; Gen5: LLL: wave/variable, LLR: wave/wave, LRL: wave/ni200, LRR: wave/ni67, RRR: wave/ni255
39: Ni30 - AxcPHrAOkPDIcPBDUoAA8P+hYwAAAAAAAAAABQyAETBAPfYAAAAAAAAAAP8A

Pitch from lowest of -7 to highest of 8
Gen1: Xor; Gen2: Modulo/Multiply; Gen3: L: Shift left/Or, R: wave/And; Gen4: LL: Greater than/Lesser or equal, LR: Divide/Subtract, RR: wave/Shift right; Gen5: LLL: wave/30, LLR: wave/wave, LRL: wave/ni200, LRR: wave/ni67, RRR: wave/ni255
40: Pitch=8 - AxcPHrAOkPDIcPBDUoAA8P+hYwAAAAAAAAAABQyAET9APfYAAAAAAAAAAP8A



	Hex codes:

       !!Gen1 waveform no operator?
		    [                  Starting position of a tree with one node               ]                  
 0: 03 01 00 00 00 00 00 00 00 00 00 05 0c 80 11 00 40 3d f6 00 00 00 00 00 00 00 00 ff 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 
       !!Gen 1 waveform dual input wave on a node?     
			 !Center Gen1 operator position and each operator value
		    [     Shift to the right when adding an operator                              ] 
 1: 03 03 00 40 00 00 00 00 00 00 00 00 05 0c 80 11 00 40 3d f6 00 00 00 00 00 00 00 00 ff 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 2: 03 03 00 50 00 00 00 00 00 00 00 00 05 0c 80 11 00 40 3d f6 00 00 00 00 00 00 00 00 ff 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 3: 03 03 00 60 00 00 00 00 00 00 00 00 05 0c 80 11 00 40 3d f6 00 00 00 00 00 00 00 00 ff 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 4: 03 03 00 70 00 00 00 00 00 00 00 00 05 0c 80 11 00 40 3d f6 00 00 00 00 00 00 00 00 ff 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 5: 03 03 00 80 00 00 00 00 00 00 00 00 05 0c 80 11 00 40 3d f6 00 00 00 00 00 00 00 00 ff 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 6: 03 03 00 90 00 00 00 00 00 00 00 00 05 0c 80 11 00 40 3d f6 00 00 00 00 00 00 00 00 ff 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 7: 03 03 00 a0 00 00 00 00 00 00 00 00 05 0c 80 11 00 40 3d f6 00 00 00 00 00 00 00 00 ff 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 8: 03 03 00 b0 00 00 00 00 00 00 00 00 05 0c 80 11 00 40 3d f6 00 00 00 00 00 00 00 00 ff 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 9: 03 03 00 c0 00 00 00 00 00 00 00 00 05 0c 80 11 00 40 3d f6 00 00 00 00 00 00 00 00 ff 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
10: 03 03 00 d0 00 00 00 00 00 00 00 00 05 0c 80 11 00 40 3d f6 00 00 00 00 00 00 00 00 ff 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
11: 03 03 00 e0 00 00 00 00 00 00 00 00 05 0c 80 11 00 40 3d f6 00 00 00 00 00 00 00 00 ff 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
12: 03 03 00 10 00 00 00 00 00 00 00 00 05 0c 80 11 00 40 3d f6 00 00 00 00 00 00 00 00 ff 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
13: 03 03 00 20 00 00 00 00 00 00 00 00 05 0c 80 11 00 40 3d f6 00 00 00 00 00 00 00 00 ff 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
14: 03 03 00 30 00 00 00 00 00 00 00 00 05 0c 80 11 00 40 3d f6 00 00 00 00 00 00 00 00 ff 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

                                                    !Waveform Editor
15: 03 03 00 30 00 00 00 00 00 00 00 00 05 0c 80 11 00 40 3d f6 00 00 00 00 00 00 00 00 ff 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
16: 03 03 00 30 00 00 00 00 00 00 00 00 05 0c 80 11 10 40 3d f6 00 00 00 00 00 00 00 00 ff 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
17: 03 03 00 30 00 00 00 00 00 00 00 00 05 0c 80 11 20 40 3d f6 00 00 00 00 00 00 00 00 ff 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
18: 03 03 00 30 00 00 00 00 00 00 00 00 05 0c 80 11 30 40 3d f6 00 00 00 00 00 00 00 00 ff 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

       !! waveform?      
			  !R Gen2 operator     
		    [     Shift to the right when adding an operator                                 ] 
19: 03 05 00 01 30 00 00 00 00 00 00 00 00 05 0c 80 11 30 40 3d f6 00 00 00 00 00 00 00 00 ff 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

       !! waveform?        
				!RR Gen3 operator    
		    [     Shift to the right when adding an operator                                    ] 
20: 03 07 00 00 11 30 00 00 00 00 00 00 00 00 05 0c 80 11 30 40 3d f6 00 00 00 00 00 00 00 00 ff 00 00 00 00 00 00 00 00 00 00 00 00 00 00

       !! waveform?  
				 !RRR Gen4 operator    		
		    [     Shift to the right when adding an operator                                       ] 
21: 03 09 00 00 02 11 30 00 00 00 00 00 00 00 00 05 0c 80 11 30 40 3d f6 00 00 00 00 00 00 00 00 ff 00 00 00 00 00 00 00 00 00 00 00 00 00

       !! waveform? 
				!RRL Gen4 operator    		
		    [     Shift to the right when adding an operator                                          ] 
22: 03 0b 00 00 70 02 11 30 00 00 00 00 00 00 00 00 05 0c 80 11 30 40 3d f6 00 00 00 00 00 00 00 00 ff 00 00 00 00 00 00 00 00 00 00 00 00

       !! waveform? 
			  !RL Gen3 operator    		
		    [     Shift to the right when adding an operator                                             ] 
23: 03 0d 00 05 00 70 02 11 30 00 00 00 00 00 00 00 00 05 0c 80 11 30 40 3d f6 00 00 00 00 00 00 00 00 ff 00 00 00 00 00 00 00 00 00 00 00

       !! waveform? 
			    !RLR Gen4 operator    		
		    [     Shift to the right when adding an operator                                                ] 
24: 03 0f 00 00 65 00 70 02 11 30 00 00 00 00 00 00 00 00 05 0c 80 11 30 40 3d f6 00 00 00 00 00 00 00 00 ff 00 00 00 00 00 00 00 00 00 00

       !! waveform? 
			  !RLL Gen4 operator    		
		    [     Shift to the right when adding an operator                                                   ] 
25: 03 11 00 04 00 65 00 70 02 11 30 00 00 00 00 00 00 00 00 05 0c 80 11 30 40 3d f6 00 00 00 00 00 00 00 00 ff 00 00 00 00 00 00 00 00 00

       !! waveform? 
			 !L Gen2 operator    		
		    [     Shift to the right when adding an operator                                 ] 
26: 03 05 00 80 30 00 00 00 00 00 00 00 00 05 0c 80 11 30 40 3d f6 00 00 00 00 00 00 00 00 ff 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

       !! waveform? 
			 !LL Gen3 operator    		
		    [     Shift to the right when adding an operator                                    ] 
27: 03 07 00 90 80 30 00 00 00 00 00 00 00 00 05 0c 80 11 30 40 3d f6 00 00 00 00 00 00 00 00 ff 00 00 00 00 00 00 00 00 00 00 00 00 00 00

       !! waveform? 
			 !LLL Gen3 operator    		
		    [     Shift to the right when adding an operator                                       ] 
28: 03 09 00 b0 90 80 30 00 00 00 00 00 00 00 00 05 0c 80 11 30 40 3d f6 00 00 00 00 00 00 00 00 ff 00 00 00 00 00 00 00 00 00 00 00 00 00

       !! waveform? 
			     !LLR Gen4 operator    		
		    [     Shift to the right when adding an operator                                          ] 
29: 03 0b 00 b0 0e 90 80 30 00 00 00 00 00 00 00 00 05 0c 80 11 30 40 3d f6 00 00 00 00 00 00 00 00 ff 00 00 00 00 00 00 00 00 00 00 00 00

       !! waveform? 
			           !LR Gen3 operator    		
		    [     Shift to the right when adding an operator                                             ]  
30: 03 0d 00 b0 0e 90 02 80 30 00 00 00 00 00 00 00 00 05 0c 80 11 30 40 3d f6 00 00 00 00 00 00 00 00 ff 00 00 00 00 00 00 00 00 00 00 00

       !! waveform? 
			           !LRL Gen4 operator    		
		    [     Shift to the right when adding an operator                                                ]  
31: 03 0f 00 b0 0e 90 07 02 80 30 00 00 00 00 00 00 00 00 05 0c 80 11 30 40 3d f6 00 00 00 00 00 00 00 00 ff 00 00 00 00 00 00 00 00 00 00

       !! waveform? 
			                !LRR Gen4 operator    		
		    [     Shift to the right when adding an operator                                                   ]  
32: 03 11 00 b0 0e 90 07 00 52 80 30 00 00 00 00 00 00 00 00 05 0c 80 11 30 40 3d f6 00 00 00 00 00 00 00 00 ff 00 00 00 00 00 00 00 00 00

       !! waveform? 
			                       !R Gen2 operator    		
		    [     Shift to the right when adding an operator                                                      ]  
33: 03 13 00 b0 0e 90 07 00 52 80 06 30 00 00 00 00 00 00 00 00 05 0c 80 11 30 40 3d f6 00 00 00 00 00 00 00 00 ff 00 00 00 00 00 00 00 00

       !! waveform? 
			                         !RR Gen3 operator    		
		    [     Shift to the right when adding an operator                                                         ]  
34: 03 15 00 b0 0e 90 07 00 52 80 00 16 30 00 00 00 00 00 00 00 00 05 0c 80 11 30 40 3d f6 00 00 00 00 00 00 00 00 ff 00 00 00 00 00 00 00

       !! waveform? Doesn't change when a waveform is changed to a numerical input, pehaps it's counting the amount of source inputs?
	                                 !!Activated numerical input?
	                                    !!RRRR Numerical Input placed left of it's parent
			                               !RRR Gen4 operator    		
		    [     Shift 2 to the right when adding an operator + numerical input                                           ]  
35: 03 17 00 b0 0e 90 07 00 52 80 00 f0 01 a1 63 00 00 00 00 00 00 00 00 05 0c 80 11 30 40 3d f6 00 00 00 00 00 00 00 00 ff 00 00 00 00 00

	                                    !!RRRR Numerical Input placed left of it's parent
36: 03 17 00 b0 0e 90 07 00 52 80 00 f0 ff a1 63 00 00 00 00 00 00 00 00 05 0c 80 11 30 40 3d f6 00 00 00 00 00 00 00 00 ff 00 00 00 00 00

	                     !!Activated numerical input?
	                        !!LRRR Numerical Input placed left of it's parent
	        [     Shift to the right when adding a numerical input                                                            ]  
37: 03 17 00 b0 0e 90 07 0f 43 52 80 00 f0 ff a1 63 00 00 00 00 00 00 00 00 05 0c 80 11 30 40 3d f6 00 00 00 00 00 00 00 00 ff 00 00 00 00

	                        !! !! Flipped?
	                  !!Activated numerical input?
	                     !!LRRR Numerical Input placed left of it's parent
	        [     Shift to the right when adding a numerical input                                                                  ]  
38: 03 17 00 b0 0e 90 f0 c8 70 f0 43 52 80 00 f0 ff a1 63 00 00 00 00 00 00 00 00 05 0c 80 11 30 40 3d f6 00 00 00 00 00 00 00 00 ff 00 00
																								  !Lowest pitch = -7		
	      !!Activated numerical input?
	         !!LRRR Numerical Input placed left of it's parent
	        [     Shift to the right +1 when adding a numerical input took up blank spot to the left for the activated ni?             ]  
39: 03 17 0f 1e b0 0e 90 f0 c8 70 f0 43 52 80 00 f0 ff a1 63 00 00 00 00 00 00 00 00 05 0c 80 11 30 40 3d f6 00 00 00 00 00 00 00 00 ff 00

					  												                  			  !Hihest pitch = 8       
40: 03 17 0f 1e b0 0e 90 f0 c8 70 f0 43 52 80 00 f0 ff a1 63 00 00 00 00 00 00 00 00 05 0c 80 11 3f 40 3d f6 00 00 00 00 00 00 00 00 ff 00
 

 



AxcPDaDwMUEPyHDwQ1KACgBhMAAAAAAAAAAABQyAET9APfYAAAAAAAAAAP8A
    03 17 0f 0d a0 f0 31 41 0f c8 70 f0 43 52 80 0a 00 61 30 00 00 00 00 00 00 00 00 05 0c 80 11 3f 40 3d f6 00 00 00 00 00 00 00 00 ff 00




   Same tree
- Test sound with sequencer off
xEA8K4xAGAGEPCocjAAAAAAAAAAAAUMgBEaQD32AAAAAAAAAAD/AAAAAAAA
c4 40 3c 2b 8c 40 18 01 84 3c 2a 1c 8c 00 00 00 00 00 00 00 00 01 43 20 04 46 90 0f 7d 80 00 00 00 00 00 00 00 3f c0 00 00 00 00 00
- Test sound with sequencer
AxEA8K4xAGAGEPCocjBERERERERERIIMAxEaQDX2AAAAAAAAAAD/AAAAAAAA
03 11 00 f0 ae 31 00 60 06 10 f0 a8 72 30 44 44 44 44 44 44 44 44 82 0c 03 11 1a 40 35 f6 00 00 00 00 00 00 00 00 ff 00 00 00 00 00 00


	Bugs - So far every operator value, numerical input value, and location of every node has been correct.
The code was created without a full data set, only what is seen on the advanced waveform tab. 
When the sequencer adds data not seen in these examples, then the waveform editor occassionally doesn't see data. 
Example: AwUPZh/vQEREREREREREggwDERpANfYAAAAAAAAAAP8AAAAAAAAAAAAAAAAA
03 05 0f 66 1f ef 40 44 44 44 44 44 44 44 44 82 0c 03 11 1a 40 35 f6 00 00 00 00 00 00 00 00 ff 00 00 00 00 00 00 00 00 00 00 00 00 00

Added the below two to the in progress app not the rules at the top of this document.
-Need to add the user control rule: a gen4 operator node when randomized will always create a numerical input child unless there the numerical input is capped at which point the node will collapse into a waveform and lose it's child nodes.
-Add rule that the Gen1 position in the UI should be fixed and not move.

App bugs:

-When a full tree is open on one side and the other side is opened to 4 gen4 source nodes then if one of the full tree gen4 node is randomized 
it sometimes makes a numerical input child but if it looses the child nodes it cannot be made to get them back via the randomizer or a a right click option.
Only on loosing 4th gen nodes on the small side can you get the full long side back again. Displays the error: This node cannot expand under the current limits, but it is possible in game.
12 Operators! - Similarily in that scenario, with one gen4 node on the large side as a waveform, I was able to expand the inside branch of the small side all the way down to two lower operators while also having 4 gen3 operators.
this was the tree: LLLL, LLLR, LLRL, LLRR, LRL, LRRL, LRRR, RLLL, RLLR, RLRL, RLRR, RRL, RRR.